【小ネタ】aws ec2 create-image コマンドの –dry-run オプションは必要な権限のチェックに使おう
こんにちわ ttaka です。
バックアップ目的で起動中の EC2 インスタンスの AMI を AWS CLI を使って作成することありますよね。オプションを覚えきれないので help コマンドを見ながら進めていたのですが --dry-run
オプションについて勘違いしてたので共有になります。
想定する読者
- 起動中の EC2 インスタンスの AMI を AWS CLI を使って作成したい人
- 運用担当などをしておりバックアップスクリプトなんかをよく書くよって人
勘違いしてたこと
help コマンドをよく読めば書いてあるのですが --dry-run
は必要な権限があるかのチェックをしてくれます。ただし、インスタンス ID に不備がないかのチェックはしてくれません。
--dry-run | --no-dry-run (boolean) Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRun- Operation . Otherwise, it is UnauthorizedOperation .
どういうこと?
例えば極端な例だとインスタンス ID が i-a
などでも必要な権限が付与されていれば dry-run の結果としては Request would have succeeded
とのメッセージが返ってくることを確認しました。
# aws ec2 create-image --instance-id i-a --name "AMI-cm-ttaka-20191025" --no-reboot --dry-run An error occurred (DryRunOperation) when calling the CreateImage operation: Request would have succeeded, but DryRun flag is set.
じゃあ、権限の確認がしたいだけなのであれば --instance-id
を付けなければいいのでは?と一瞬思ったのですが --instance-id
と --name
は必須オプションのためエラーとなってしまいました。
# aws ec2 create-image --name "AMI-cm-ttaka-20191025" --no-reboot --dry-run ・・・ aws: error: argument --instance-id is required
最後に
実際の運用であればインスタンスのメタデータからインスタンス ID を取ってきて環境変数に代入して渡してあげる、cron などで定期実行する前に --dry-run
を外して実行するなどをしていれば、実際に問題になることはないかなと思っています。
どちらかというと --dry-run
という単語で思考停止してしまって「いい感じにチェックしてくれるんだ」となった私のが問題でした……ドキュメントちゃんと読もう!!
この記事がだれかのお役に立てば幸いです。